<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/2002/REC-xhtml1-20020801/DTD/xhtml1-transitional.dtd">
<!-- saved from url=(0053)https://cg.iit.bme.hu/grafhazi/index.php?cmd=exercise -->
<html xmlns="http://www.w3.org/1999/xhtml" lang="hu" xml:lang="hu"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>A házi feladat leírása</title>
        
        <meta name="author" content="Balazs Domonkos, Balazs Toth">
        <meta name="description" content="A házi feladat leírása">

        <meta name="robots" content="all">
        <link rel="stylesheet" type="text/css" href="./A házi feladat leírása_files/style_basic.css">
        <link rel="stylesheet" type="text/css" href="./A házi feladat leírása_files/style_fixed.css">
        <link rel="stylesheet" type="text/css" href="./A házi feladat leírása_files/images.css">
</head>
<body><div id="container">&nbsp;
	<div id="header_row">S73MP4 | <a href="https://cg.iit.bme.hu/grafhazi/index.php?cmd=dologout">Kijelentkezés</a></div>
	<div id="left-side">
		<div id="menu"><ul>
			<li><a href="https://cg.iit.bme.hu/grafhazi/index.php?cmd=main">Főoldal</a></li>
			<li><a href="https://cg.iit.bme.hu/grafhazi/index.php?cmd=change_password">Jelszócsere</a></li>
			<li><a href="./A házi feladat leírása_files/A házi feladat leírása.htm">Feladatleírás</a></li>
			<li><a href="https://cg.iit.bme.hu/grafhazi/index.php?cmd=src_upload">Kódfeltöltés</a></li>
			<li><a href="https://cg.iit.bme.hu/grafhazi/index.php?cmd=chk_results">Eredmények</a></li>
		</ul></div>
	</div>
	<div id="content">
		<h1>A házi feladat leírása</h1>
		<p>Az alábbiakban olvashatod a Számítógépes Grafika tárgy kiadott házi feladatait.</p>
		<h2>Első feladat</h2><p></p><p>Készítsen sípálya tervező programot!</p>
<p>A terep felülnézetben 10km x 10km-es négyzet, a magasságfüggvényt tetszés szerinti folytonos, differenciálható függvénnyel definiálhatja, amelynek maximuma 1 km, minimuma pedig 0, és a maximum, illetve a minimum a tartomány belsejében található. A program indításakor a terepet felülnézetben jeleníti meg, szürkeárnyalatos képként, ahol a maximális intenzitás az 1km magasságnak, a fekete pedig a 0-ás tengerszintnek felel meg.</p>

<p>Az egér bal gombjának lenyomásával egy pontot jelölhet ki a terepen, ahonnan egy sípályát generálunk felülnézetből 100 m-es egyenes szakaszokból úgy, hogy
</p><ul>
<li> a sípálya mindig a legmeredekebb lejtő felé (a gradienssel analitikusan számítandó) fordul</li>
<li>egy-egy szakasz színe fekete, ha a meredekség legalább 40 fokos, piros, ha 20-40 fok között van, és kék, ha 20 fok alatti.</li>
<li>a sípálya befejeződik, ha nem lehet tovább lefele csúszni</li></ul>
Egy sípálya max 20 szakaszból állhat, a program max 10 sípályát kezel egyszerre.<p></p>

<p>Az 's' betű lenyomására mindig a következő pálya tetejéről egy újabb sízőt indíthat el, amely fekete pályán 40 km/h-val, piroson 20 km/h-val, kéken 10 km/h-val siklik, a pálya végén pedig eltűnik. A sízőt egy egyenlőszárú háromszöggel jelenítse meg, amelynek a csúcsa a haladási irányba mutat. A program max 10 sízőt képes egyszerre szimulálni.</p>

<p>A felhasználható OpenGL függvények csak azok, amelyek a "Grafikus alap hw/sw" diákban szerepelnek.</p>

<center><img width="400px" src="./A házi feladat leírása_files/hazi1.png"></center>
<p></p>
		<p>Beadási határidő: <b>2012. 02. 26. 23:59</b></p>
		<hr>
		<h2>A megoldás módja</h2><p>A feladatot C++ nyelven kell megvalósítani <a target="_blank" href="http://www.opengl.org/">OpenGL</a> és <a target="_blank" href="http://www.opengl.org/resources/libraries/glut/">GLUT</a> felhasználásával az alábbi <a target="_blank" href="https://cg.iit.bme.hu/grafhazi/content/cg_template_2012.cpp">sablon</a> módosításával. A feladat megoldása során implementálni kell az <b>onInitialization()</b>, <b>onDisplay()</b>, <b>onKeyboard()</b>, <b>onMouse()</b> és <b>onIdle()</b> függvényeket. Amennyiben a feladat megköveteli természetesen létrehozhatsz segédfüggvényeket is. Fonots azonban, hogy csak a jelzett részen belül található programrészeket értékeljük.</p>
		<h3>A forráskód feltöltése</h3><p>Az elkészült forráskód feltöltésére a <a href="https://cg.iit.bme.hu/grafhazi/index.php?cmd=src_upload">Kódfeltöltés</a> menüpont alatt van lehetőséged. A házi feladat határidejének lejártáig tetszőleges alkalommal tölthetsz fel megoldás, értékelni az utolsó változatot fogjuk.</p>
		<h3>A fordítási és futási eredmények ellenőrzése</h3><p>A fordítás sikerességét az <a href="https://cg.iit.bme.hu/grafhazi/index.php?cmd=chk_results">Eredmények</a> menüpont alatt tudod ellenőrizni.</p>
		<hr>
		<h2>Néhány tanács</h2><p></p>
		<p>A programokat <a target="_blank" href="http://gcc.gnu.org/gcc-4.4/">GNU g++ 4.4.1 verziószámú fordítóprogrammal</a> fordítjuk, mely szigorúbban követi a C++ szabványt mint a Visual Studio különböző változatai, ezért előfordulhat, hogy sikertelen lesz a fordítás annak ellenére, hogy a Visual Studio fordítójával lefordul. A pontos hibáról az <a href="https://cg.iit.bme.hu/grafhazi/index.php?cmd=chk_results">Eredmények</a> menüpont alatt tájékozódhatsz.</p>
		<p>A feladatokat ISO8859-1 vagy ISO8859-2 formátumban várjuk, az UTF-16 és UNICODE formátumú programok hibás fordítást okoznak.</p>
		<p>A sablonban szereplő elválasztó sorokat (//~~~~~~...) célszerű a beküldött programban is megőrizni. Ellenkező esetben előfeldolgozási hiba lehet, bár a gyakoribb esetekre a parsert felkészítettük.</p>
		<h3>Gyakori hibák</h3><p></p>
		<ul><li>Gyakori hiba konstans argumentumot átadni referenciát váró függvénynek. Pl. <b>void fv(int&amp; a)</b> függvényt <b>void fv(2)</b>-vel hívni. Ez nem okoz hibát Visual Studio alatt az alap beállításokkal, de a szabvány szerint hibás.</li><li>A tipikus C++ hibákról jó összefoglalót találhatsz ezen az <a href="http://www-h.eng.cam.ac.uk/help/tpl/languages/C++/FAQ.html">oldalon</a>.</li><li>Az OpenGL specifikáció nem rendelkezik a <b>ModelView</b> és <b>Projection</b> mátrixok alapértelmezett értékeiről. Ezek a program indulásakor tetszőlegesek lehetnek. Több beküldött feladatnál tapasztaltuk, hogy hibásan feltételezte az egység mátrixot. A kiadott forráskód-sablonban ezért inicializáljuk a mátrixokat a futás kezdetén.</li><li>Több beküldött megoldásban tapasztaltuk az előfordítói <b>#define</b> direktívával definiált makrók hibás használatát. Semmi sem garantálja, hogy más rendszereken vagy akár csak más GLUT verzióban a numerikus konstansok megegyeznek, ezért hibás programozói gyakorlat ezen numerikus konstansok használata. Helyettük az előfordítói makrókat kell használni.</li><li>Az <b>onIdle()</b> függvény akkor hívódik amikor semilyen esemény nem érkezik az rendszertől. Ennek megfelelően semmi sem garantálja, hogy mikor fog lefutni. Ebből következően itt olyan műveleteket végezni, melyek nélkül a renderelés hibás lesz (pl. a mátrixok beállítása) nem érdemes.</li><li>Nehány hasznos tanács a <a href="http://www.opengl.org/documentation/specs/glut/spec3/node90.html#SECTION000130000000000000000">GLUT</a> használatához.</li><li>Csak a sablonban regisztralt callback fuggvenyeket erdemes hasznalni, mivel a teszt rendszerben a tobbi glut fuggveny meghivasa sikertelen lesz.</li></ul>
		<p>&nbsp;</p>
	</div>
	<div id="footer">
        	<p>© 2008-2010, <a href="http://www.iit.bme.hu/">BME Irányítástechnika és Informatika Tanszék</a></p>
	</div>
</div>

</body></html>